package com.wcs.exam.dao;

import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.extension.service.IService;
import com.wcs.exam.dao.po.PaperQuestionCiteCountPO;
import com.wcs.exam.dao.impl.mapper.entity.PaperQuestion;

import java.util.Collection;
import java.util.List;

/**
 * 试卷试题 持久化接口
 *
 * @author wcs
 * @since 2025-03-11
 */
public interface PaperQuestionDao extends IService<PaperQuestion> {

    /**
     * 根据条件分组统计
     *
     * @param wrapper   统计条件
     * @param classType 返回类型
     * @param <R>       统计结果类型
     * @return 统计结果
     */
    <R> List<R> selectObjs(Wrapper<PaperQuestion> wrapper, Class<R> classType);

    /**
    * 获取最大排序
    *
    * @return 最大排序
    */
    Integer getMaxSort();

    /**
     * 根据试卷ID查询试卷试题
     *
     * @param paperId 试卷ID
     * @return 试卷试题
     */
    List<PaperQuestion> listByPaperId(Long paperId);

    /**
     * 根据试卷ID查询试卷试题-缓存
     *
     * @param paperId 试卷ID
     * @return 试卷试题
     */
    List<PaperQuestion> listByPaperIdForCache(Long paperId);

    /**
     * 根据标题ID查询试卷试题
     *
     * @param titleIds 标题ID
     * @return 试卷试题
     */
    List<PaperQuestion> listByTitleIds(Collection<Long> titleIds);

    /**
     * 根据试卷ID删除试卷试题
     *
     * @param paperId 试卷ID
     * @return 删除结果
     */
    Boolean deleteByPaperId(Long paperId);

    /**
     * 根据试卷ID删除试卷试题
     *
     * @param paperIds 试卷ID
     * @return 删除结果
     */
    Boolean deleteByPaperIds(Collection<Long> paperIds);

    /**
     * 根据题目ID查询题目被引用次数
     *
     * @param questionIds 题目ID
     * @return 题目被引用次数
     */
    List<PaperQuestionCiteCountPO> questionCiteCunt(Collection<Long> questionIds);

}
